using System;
using System.Linq;
using M1;
using UnityEngine;

[CreateAssetMenu(fileName = "任务数据",menuName = "创建数据/任务数据")]
public class 任务数据 : BaseModel<任务数据,任务Data>
{
    public 任务Data 任务1{get{return Datas[0];}}

    public 任务Data get任务Data(int taskId)
    {
        return Datas.FirstOrDefault(f => f.Id == taskId);
    }

    public void 触发接受任务逻辑(int id)
    {
        var data = get任务Data(id);
        int 逻辑id = data.接受Id;
        逻辑数据.Instance.执行逻辑(逻辑id);
        // data.完成
        监听完成任务(data);
    }
    public void 触发完成任务逻辑(int id)
    {
        var data = get任务Data(id);
        int 逻辑id = data.完成Id;
        逻辑数据.Instance.执行逻辑(逻辑id);
        // data.完成
        M.Event.RemoveEvent(data.完成条件.ToString());
    }

    void 监听完成任务(任务Data data)
    {
        M.Event.AddEvent<int>(data.完成条件.ToString(), (i) =>
        {
            if (data.完成参数 == -1 || data.完成参数 == i)
            {
                增加任务进度(data);
            }
        });
    }

    void 增加任务进度(任务Data d)
    {
        Task管理器.Instance.增加任务进度(d);
    }

    public I任务配置 下个任务(int id)
    {
        var data = get任务Data(id);
        if (data.下个任务 > 0)
        {
            var next = get任务Data(data.下个任务);
            return next;
        }

        return null;
    }

    public void 任务寻路(任务Data d)
    {
        switch (d.寻路)
        {
            case 寻路Type.打开对白:
                Window管理器.Instance.OpenWindow<对话窗口View>();
                var win = Window管理器.Instance.GetWindow<对话窗口View>();
                win.SetUpDialog(d.寻路参数);
                break;
            case 寻路Type.寻路Npc:
                var npc = Npc配置.Instance.getNpc(d.寻路参数);
                M二合小镇.Get主角().AI寻路(npc.transform.position);
                break;
        }
    }
}

[Serializable]
public class 任务Data: I任务配置
{
    public int Id;
    public TaskType Title;
    public string 描述;
    public int Target;
    public int Reward;
    public int 接受Id;
    public int 完成Id;
    public 完成任务条件 完成条件;
    public int 完成参数;
    public int 下个任务;
    public 寻路Type 寻路;
    public int 寻路参数;
    
    public int GetId { get{return Id;} }
    public TaskType Get类型 { get{return Title;} }
    public int Get目标 { get{return Target;} }
}

public enum 完成任务条件
{
    确认形象,
    对白完成,
    通用任务完成事件,
    EventKey_点击人,
}

public enum 寻路Type
{
    打开对白,
    寻路Npc,

}